#ifndef SERVER_H
#define SERVER_H

#include <sys/types.h>
#include <sys/stat.h>
#include "../common/messages.h"
#include "messageshandler.h"

/*
 * Klasa odpowiedzialna za obsługę odczytu wiadomości
 * przychodzących.
 */
class Server
{
public:
    static Server* getInstance();

    /*
     * Inicjuje zasoby serwera: towrzy i otwiera kolejkę FIFO
     */
    int init();

    /*
     * Główna pętla obsługi wiadomości: odczyt i ich analiza
     */
    int run();

private:
    Server();
    Server(const Server& other);

    /*
     * Ustawia timeout dla operacji odczytu
     */
    void setTimeout(long nanosec);

    int fifo_; // deskryptor wejściowej kolejki FIFO
    bool runMainLoop_; // false - zakończ obsługę wiadomości; true - działaj dalej
    MessagesHandler handler_; // klasa osbługująca wiadomości
    struct timeval timeout_; // timeout dla operacji odczytu
};

#endif // SERVER_H
